SQL Server valeurs de minutage peuvent être incorrectes lorsque vous utilisez des utilitaires ou des technologies qui changent les fréquences du processeur

Résumé

Microsoft SQL Server 2005 utilise le compteur de processeur haute résolution pour fournir des fonctionnalités de minutage en microsecondes. Une microseconde est un millionième de seconde (ou un millième de milliseconde). Toutefois, SQL Server valeurs de minutage peuvent être incorrectes si vous utilisez des technologies qui modifient les fréquences du processeur. Par exemple, ce problème peut se produire lorsque vous utilisez l’une des technologies suivantes :

  • Pas à pas de l’UC
  • Technologie AMD Cool’n’Quiet
  • Différents schémas d’alimentation

Cet article contient des méthodes et des informations supplémentaires pour vous aider à contourner ce problème.

Symptômes

Lorsque vous utilisez l’instruction SET STATISTICS TIME pour afficher les temps d’exécution, d’analyse et de compilation du serveur, vous pouvez obtenir des valeurs incorrectes. Par exemple, vous remarquerez peut-être que le temps écoulé de l’SQL Server temps d’exécution est beaucoup plus long que le temps processeur. Ce problème peut affecter la précision du réglage des performances. Ce problème se produit lorsque vous utilisez l’une des technologies répertoriées dans la section « Résumé » sur le serveur.

Cause

Ce problème se produit car les fréquences du processeur sont modifiées lorsque vous utilisez ces technologies. SQL Server 2005 utilise le compteur de processeur haute résolution pour fournir des fonctionnalités de minutage en microsecondes. Si les fréquences du processeur sont modifiées pour économiser l’énergie et réduire la production de chaleur, les durées calculées peuvent être incorrectes.

Résolution

Informations sur le Service Pack

Pour résoudre ce problème, obtenez le dernier Service Pack pour SQL Server 2005. Pour plus d’informations, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

913089 Comment obtenir le dernier Service Pack pour SQL Server 2005
Remarque Dans SQL Server 2005 Service Pack 3 et les Service Packs ultérieurs, l’horodatage du processeur n’est pas utilisé. Ces versions de SQL Server 2005 utilisent un minuteur plus fiable qui a une précision maximale de 1 milliseconde.

État

Ce problème a été corrigé pour la première fois dans SQL Server Service Pack 3 2005.

Solution de contournement

SQL Server 2005 nécessite des points de données connus et stables pour effectuer un réglage précis des performances. Si les réglages dynamiques de la fréquence du processeur sont activés sur l’ordinateur, vous pouvez les désactiver afin que les processeurs conservent un taux de fréquence stable avant de commencer à surveiller et à régler SQL Server performances. Pour cela, procédez comme suit.

Configurer le schéma d’alimentation sur l’ordinateur pour forcer les processeurs à rester à la fréquence maximale

Pour ce faire, procédez comme suit :

  1. Cliquez sur Démarrer, sur Exécuter, tapez Powercfg.cpl, puis cliquez sur OK.

  2. Dans la boîte de dialogue Propriétés des options d’alimentation, cliquez sur Always On dans la liste Schémas d’alimentation.

  3. Cliquez sur OK.

Une dérive peut se produire. Une dérive est une divergence entre les valeurs de fréquence du processeur. Pour plus d’informations, consultez la section « Dérive ». Dans ce cas, vous devez redémarrer Microsoft Windows pour resynchroniser les fréquences de tous les processeurs après avoir modifié le schéma d’alimentation.

Si vous ne pouvez pas redémarrer l’ordinateur, activez SQL Server’affinité processeur pour empêcher SQL Server threads de travail de passer d’un processeur à l’autre. Dans ce cas, vous n’avez pas besoin de redémarrer l’ordinateur même si une divergence entre les valeurs de fréquence du processeur se produit. Pour activer SQL Server l’affinité processeur pour toutes les uc sur le serveur, vous devez utiliser un masque différent, en fonction du nombre de processeurs logiques qui se trouvent sur le serveur.

Le tableau suivant répertorie des exemples de scénarios.

Numéro d’UC Instructions pour activer l’affinité processeur
02 processeurs exec sp_configure 'affinity mask', 0x00000003
GO
Reconfigurer
GO
04 processeurs exec sp_configure 'affinity mask', 0x0000000F
GO
Reconfigurer
GO
08 processeurs exec sp_configure 'affinity mask', 0x000000FF
GO
Reconfigurer
GO
16 processeurs exec sp_configure 'affinity mask', 0x0000FFFF
GO
Reconfigurer
GO
32 processeurs exec sp_configure 'affinity mask', 0xFFFFFFFF
GO
Reconfigurer
GO

Remarque Il peut être insuffisant pour désactiver les fonctionnalités de variation de fréquence du processeur au niveau du BIOS. Divers utilitaires tiers peuvent modifier les fréquences du processeur. Certaines implémentations permettent d’ajuster la fréquence même lorsque les processeurs sont sous les paramètres du schéma de puissance maximale. Dans ce cas, vous devez désactiver ces utilitaires tiers lorsque vous effectuez le réglage des performances dans SQL Server 2005.

Utiliser des utilitaires et des pilotes tiers pour synchroniser les fréquences du processeur et les compteurs d’horloge du processeur

Dans de rares cas, un système peut nécessiter une mise à jour du fabricant pour corriger les problèmes de fréquence du processeur. Il est recommandé d’case activée le système pour les dernières mises à jour du BIOS, du microcode et du microprogramme si vous pensez que le système peut avoir un problème.

Informations supplémentaires

Microsoft SQL Server 2000 et les versions antérieures de SQL Server utilisent les mécanismes de minutage Windows. Les mécanismes de minutage utilisent des valeurs de précision en millisecondes. En règle générale, cette précision est de 10 à 15 ms. Toutefois, la précision peut être aussi grande que 55 ms. SQL Server requêtes se terminent fréquemment dans des intervalles de temps d’une milliseconde ou d’une microseconde à un chiffre. Cette précision nécessite un minuteur haute résolution. Par conséquent, ces versions de SQL Server indiquent la durée de certaines requêtes à 0 ms. Par conséquent, il est difficile de surveiller les performances et de régler SQL Server performances dans les versions antérieures de SQL Server.

SQL Server 2005 améliore la précision en utilisant le compteur de processeur haute résolution pour fournir des fonctionnalités de minutage en microseconde. Lorsque vous utilisez les technologies répertoriées dans la section « Résumé », les valeurs de minutage signalées peuvent être incorrectes.

Ce problème peut affecter les objets et fonctionnalités suivants :

  • Événements de trace :

    • L’événement Attention

    • Événements dans le nœud Procédures stockées

    • Événements dans le nœud TSQL

    • Événements dans le nœud Objets

    • Événements dans le nœud Transactions

  • Vues de gestion dynamique :

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • L’instruction SET STATISTICS TIME

  • La table système sysprocesses

Après avoir installé SQL Server 2005 Service Pack 2 (SP2), SQL Server enregistre un message d’erreur dans le journal des erreurs lorsque SQL Server détecte que les minuteurs haute résolution ne sont pas synchronisés entre les processeurs. Le message d’erreur indique que le minutage des performances peut ne pas être précis et que les utilisateurs doivent utiliser les données de performances avec prudence.

Le texte du message d’erreur ressemble à l’un des messages d’erreur suivants :

Message d’erreur 1

Remarque

Le compteur d’horodatage du processeur sur l’ID 2 du planificateur n’est pas synchronisé avec les autres processeurs.

Message d’erreur 2

Remarque

La fréquence d’horodatage du processeur est passée de 191469 à 1794177 cycles par milliseconde. La nouvelle fréquence sera utilisée

SQL Server utilise l’instruction RDTSC (Real Time Stamp Counter) pour acquérir le nombre de cycles de processeur 64 bits. Vous pouvez diviser cette valeur par la fréquence du processeur pour convertir la valeur en valeurs de millisecondes. Des variations de minutage peuvent se produire lorsque la fréquence du processeur change ou que la dérive se produit.

Pas à pas de l’UC

Le pas à pas de l’UC est défini comme une modification délibérée de la fréquence du processeur. Le pas à pas du processeur peut également être connu sous le nom de technologie Intel SpeedStep ou AMD PowerNow ! Technologie. Lorsque le pas à pas de l’UC se produit, la vitesse du processeur peut augmenter ou diminuer par incréments aussi petits que 50 MHz pour économiser l’énergie et réduire la production de chaleur. Les processeurs qui se trouvent dans le même nœud d’accès à la mémoire non uniforme (NUMA) n’ajustent pas indépendamment les fréquences.

Le tableau suivant illustre la façon dont les modifications pas à pas de l’UC peuvent affecter les calculs de minutage.

Action Cycles RDTSC Cycles par milliseconde (Fréquence) Heure de l’horloge murale
Démarrer le traitement par lots 1 200 0
Pas vers le bas de la fréquence 200 100 1 ms
Terminer le lot 500 3 ms
TOTAUX 500 4 ms

SQL Server capture les cycles RDTSC au début et à la fin des cycles RDTSC. Ensuite, SQL Server divise les cycles par la valeur de fréquence.

Dans cet exemple, les calculs de minutage suivants se produisent lorsque vous utilisez une valeur de fréquence de 200 ou 100 :

  • Fréquence 200 : 500/200 = 2,5 ms

  • Fréquence 100 : 500/100 = 5 ms

Aucun des calculs de minutage ne correspond à l’heure réelle de l’horloge murale de 4 ms.

Si ce calcul est utilisé dans un événement de trace RPC :Completed, les colonnes de données durée et heure de fin sont signalées de manière incorrecte. L’événement RPC :Completed capture le temps de démarrage de l’horloge murale et le nombre de cycles du processeur. Pour obtenir un minutage de résolution plus élevé que celui de Windows dans SQL Server 2005, les colonnes de données durée et heure de fin d’une trace SQL Server sont calculées à l’aide du nombre de cycles de processeur écoulés. La colonne d’heure de fin est calculée en ajoutant la colonne duration à la colonne d’heure de début. Dans cet exemple, la colonne d’heure de fin est calculée en ajoutant incorrectement 2,5 ms ou 5 ms à l’heure de début.

Dérive

La dérive est une divergence dans les valeurs d’horloge du processeur. Les systèmes qui ont plusieurs processeurs peuvent produire différentes valeurs d’horloge du processeur pour le même point dans le temps. Bien que ce ne soit pas courant, les processeurs peuvent rencontrer une séparation d’horloge au fil du temps.

L’exemple suivant montre comment les modifications de dérive peuvent affecter le résultat de la colonne de données de durée dans une trace SQL Server. L’exemple suppose que la fréquence du processeur reste stable à 200 cycles par milliseconde. Le tableau suivant illustre les événements de ce scénario.

Action Processeur planifié Windows PROCESSEUR 1 RDTSC PROCESSEUR 2 RDTSC Heure de l’horloge murale
Démarrer le traitement par lots 1 100 1100 0
Terminer le lot 2 900 1900 4 ms
TOTAUX 4 ms

SQL Server capture les cycles RDTSC aux points de départ et aux points d’arrivée. Ensuite, SQL Server divise les cycles RDTSC par la valeur de fréquence. Dans cet exemple, Windows a planifié le thread de travail SQL Server sur deux processeurs différents. Le SQL Server thread de travail qui service le lot s’est exécuté en premier sur le premier processeur (UC 1).

Toutefois, l’exécution du lot a été interrompue à un moment donné et SQL Server a envoyé l’exécution du lot à la file d’attente en attente. Quand SQL Server envoyé le thread de travail SQL Server qui réexécutera ce lot à la file d’attente exécutable, Windows a distribué le thread pour qu’il s’exécute sur le deuxième processeur (PROCESSEUR 2). Le thread de travail SQL Server s’est exécuté sur CPU 2. En raison de la dérive du processeur, la valeur de graduation de fin capturée à partir du processeur 2 était 1900 au lieu de 900. Vous pouvez éviter ce comportement si vous activez SQL Server’affinité processeur.

Les calculs de minutage suivants sont utilisés dans cet exemple :

  • Valeur incorrecte mais signalée : (1900 – 100 = 1800) / 200 = 9 ms
  • Valeur correcte : (900 – 100 = 800) / 200 = 4 ms

La valeur de la colonne duration pour l’événement RPC :Completed est signalée sous la forme 9 ms au lieu de 4 ms. Ce résultat est plus du double de la valeur correcte de 4 ms.

Des messages d’avertissement de dérive sont ajoutés à SQL Server 2005 pour indiquer que les sorties de performances mentionnées précédemment peuvent ne pas être fiables. Dans certaines situations non couvertes, SQL Server 2005 SP2 peut signaler des messages d’avertissement concernant les éléments suivants :

  • Faux messages d’avertissement de dérive
  • La dérive peut devenir des dizaines de millisecondes sans provoquer d’effet système notable

Vous devez être prudent lorsque vous évaluez les sorties liées aux performances et lorsque vous comparez les sorties liées aux performances aux minutages de l’horloge murale. S’il n’y a aucun signe d’autres problèmes de performances, vous pouvez généralement ignorer les messages d’avertissement de dérive. Par exemple, vous pouvez généralement ignorer les messages d’avertissement de dérive dans les situations suivantes :

  • Les processus s’exécutent comme prévu.
  • SQL Server requêtes ne s’exécutent pas dans des modèles de durée étranges.
  • Vous ne voyez pas de signes d’autres goulots d’étranglement.

Toutefois, avant d’ignorer les messages d’avertissement de dérive, nous vous recommandons de contacter votre fabricant pour vous assurer qu’aucun problème RDTSC connu n’existe.

Vous pouvez utiliser l’indicateur de trace 8033 (–T8033) pour revenir au comportement de création de rapports dans la version d’origine de SQL Server 2005 et dans SQL Server 2005 SP1. Les versions d’origine de SQL Server 2005 et SQL Server 2005 SP1 ne signalent pas de messages d’avertissement de dérive. Si vous exécutez la version d’origine de SQL Server 2005 ou SQL Server 2005 SP1 sans problème, vous pouvez généralement ignorer les messages.

Pourquoi l’instruction WAITFOR DELAY fonctionne-t-elle correctement ? Qu’en est-il des processus système périodiques ?

Les mécanismes de délai d’attente ne sont pas affectés par la conception haute résolution. SQL Server n’utilise pas le minuteur haute résolution pour les activités basées sur le minuteur. Certaines activités de délai d’attente sont basées sur le minuteur de résolution réduit qui utilise la fonction GetTickCount. Ces activités de délai d’attente incluent le délai d’expiration du verrouillage, l’instruction WAITFOR DELAY et la détection d’interblocage.

Pour plus d’informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :

938448 Un serveur Windows Server 2003 peut rencontrer une dérive de compteur d’horodatage si le serveur utilise des processeurs AMD Opteron double cœur ou des processeurs AMD Opteron multiprocesseurs

895980 Les programmes qui utilisent la fonction QueryPerformanceCounter peuvent avoir des performances médiocres dans Windows Server 2003 et windows XP

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.